コンピュータアーキテクチャのエッセンス [第 2 版]
https://m.media-amazon.com/images/I/81OVeAf0mpL._SL1500_.jpg
1 章 序論と概要
ハードウェアを理解することで、より小さく、高速で、エラーを起こしにくいコードを書けるから 1 部 基礎
2 章 デジタル論理回路の基礎
複数の要素を扱うために、ソフトウェアでは反復するが、ハードウェアでは複製する
3 章 データとプログラムの表現
ビット列を人間が扱いやすいように 16 進記法を用いることが多い 2 部 プロセッサ
4 章 さまざまなプロセッサと計算エンジン
コンピュータ構成の 2 つの基本アプローチ
命令によって必要なサイクルは違う
5 章 プロセッサの種類と命令セット
6 章 データパスと命令実行
7 章 オペランドのアドレッシングと命令表現
8 章 CPU : マイクロコード、保護、プロセッサモード
コンピュータの歴史では、初期に集中という考えが生まれ、できるだけ多くの機能を 1 つのプロセッサに集めようとした → 中央処理装置 (CPU) 現在のコンピュータシステムは分散アプローチになったが、CPU という言葉は残っている 複雑な CPU を構築するため、CPU を 2 つに分けて構築する場合がある
マイクロコードによってマクロ命令セットが実装される
9 章 アセンブリ言語とプログラミングパラダイム
低水準プログラミングやそのプログラミング言語はコンピュータアーキテクチャの一部ではないが、密接な関係
3 部 メモリ
10 章 メモリとストレージ
11 章 物理メモリと物理アドレッシング
メモリの性能
複数の物理メモリの利用
メモリバンク : 複数の物理メモリで大きな 1 つのメモリを構成 メモリのインターリーブ (相互配置) : アドレスが連続するワードを、別々のメモリモジュールに互い違いに配置
12 章 キャッシュとキャッシング
13 章 仮想メモリ技術と仮想アドレッシング
4 部 入出力
14 章 入出力の概念と用語
コンピュータと外部デバイスの相互作用は 2 種類
コンピュータがデバイスを制御
コンピュータとデバイスがデータを交換
クロック周期の違いをインターフェイスでどう調停するか?
多重化のテクニック : 大きなデータをハードウェアで細分化して 1 片ずつ転送する 15 章 バスとバスアーキテクチャ
バスは一度に 1 つの転送しかできないが、スイッチングファブリックは複数の転送を同時にできる
16 章 プログラム駆動と割り込み駆動の入出力
プロセッサが入出力デバイスとの同期に使う基本的な方法はポーリング 1950 年代から 1960 年代にかけて、プロセッサと入出力装置の処理速度の違いが意識される → 割り込み駆動の入出力へ 最近のバスはコンピュータの実行中にデバイスを抜き差しできる
USB はメインバスのひとつのデバイスのように振る舞い、USB ハンドラが 2 次的なデバイス固有のハンドラを扱う
ほとんどのアーキテクチャではメモリとデバイスの両方が中心的なバスに接続されている DMA のさらなる最適化の技法としてバッファの連鎖と呼ばれるテクニック 17 章 デバイス入出力とバッファのプログラミング
プログラマの視点から入出力を考察する章
多くのプログラミングシステムにおいて、入出力はプログラマから隠される
ハードウェアデバイスを操作する代わりに、プログラマが使うのは、ファイルやウィンドウのような抽象
埋め込みシステムでも、デバイスドライバと直接やりとりする代わりに仲介となるランタイムライブラリに依存することが多い 性能を最適化するためには、システムコールの回数を最小化すること
flush 関数による明示的なシステムコールの呼び出し
5 部 高度な話題
18 章 並列処理
19 章 パイプライン処理
20 章 電力とエネルギー
電力の消費に関して設計者が重視すべき側面
ピークでも十分な電力を供給できるようにするメガワット単位の給電の問題 21 章 性能評価
コンピュータは汎用的に使えるので、あるシステムの性能は実行するタスクに依存する
22 章 アーキテクチャのサンプルと階層構造
23 章 ハードウェアのモジュール化
付録